{
  /*
  学习目标：使用枚举-限定取值范围、直接赋值
  作用：指定一组可选的取值范围。
  与字面量类型的区别：
    1. 字面量类型只能当做类型来使用。
    2. 枚举既可以当做类型，又可以当做值来使用。
  使用限制：
    1. 枚举的值，只能是字符串或数字。
    2、 字面量没有这个限制 
    
*/

type Action = {
  type: 'todo/add',
  payload: string
} | {type: 'todo/des', payload: number}

  enum ActionType {
  TODO_ADD = ,
    TODO_DEL = 'todo/del',
    TODO_UPDATE = 'todo/updateById',
  }

  reducer({}, { type: ActionType.TODO_ADD });
  reducer({}, { type: ActionType.TODO_DEL });
  reducer({}, { type: ActionType.TODO_ADD });
  dispatch({ type: 'todo/add' });
  function reducer(
    state = {},
    action: {
      type: ActionType;
    }
  ) {
    switch (action.type) {
      case ActionType.TODO_ADD:
        break;
      case ActionType.TODO_DEL:
        break;
      case ActionType.TODO_UPDATE:
        break;

      default:
        break;
    }
    // switch (action.type) {
    //   case 'todo/add':
    //     break;
    //   case 'todo/des':
    //     break;
    //   default:
    //     return state;
    // }
  }

  function dispatch(action: { type: ActionType }) {
    console.log(action);
  }

  // 总结：
  // 1. 什么是字面量-通过字面意思就能看懂这个值的类型
  // 2. 字面量类型使用场景？
  // 约束取值范围，明确表示一组可选值的一个，通常配合联合类型。如 贪吃蛇
}
